home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / waisgate / panic.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  3KB  |  154 lines

  1. /* WIDE AREA INFORMATION SERVER SOFTWARE:
  2.    No guarantees or restrictions.  See the readme file for the full standard
  3.    disclaimer.
  4.  
  5.    Morris@think.com
  6. */
  7.  
  8. /* Change log:
  9.  * $Log:    panic.c,v $
  10.  * Revision 1.10  92/03/07  19:42:30  jonathan
  11.  * ANSIfied arguments.
  12.  * 
  13.  * Revision 1.9  92/02/20  13:58:10  jonathan
  14.  * Removed redundant include of varargs.h.  Removed fprintf for BSD, since
  15.  * we've not got a vprintf.
  16.  * 
  17.  * Revision 1.8  92/02/12  13:38:05  jonathan
  18.  * Added "$Log" so RCS will put the log message in the header
  19.  * 
  20. */
  21.  
  22. /* panic is an error system interface.  On the Mac, it will pop
  23.  * up a little window to explain the problem.
  24.  * On a unix box, it will print out the error and call perror()
  25.  */
  26.  
  27. #include "panic.h"
  28. #include "futil.h"
  29.  
  30. #include <ctype.h>
  31.  
  32. #ifndef EXIT_FAILURE  /* should be in stdlib */
  33. #define EXIT_FAILURE (-1)
  34. #endif /* ndef EXIT_FAILURE */
  35.  
  36. /*----------------------------------------------------------------------*/
  37.  
  38. static void exitAction _AP((long error));
  39.  
  40. static void
  41. exitAction(error)
  42. long error;
  43. {
  44.   long i;
  45. #ifdef THINK_C
  46.   Debugger();
  47. #else
  48.   for (i = 0; i < 100000; i++)
  49.     ;
  50. #endif
  51.   abort();
  52. }
  53.  
  54. /*----------------------------------------------------------------------*/
  55.  
  56. #define PANIC_HEADER "Fatal Error:  "
  57. #define BELL "\007"
  58.  
  59. #ifdef ANSI_LIKE /* use ansi varargs */
  60.  
  61. #ifdef THINK_C /* pop up a dialog box */
  62. #include "CDynamicError.h"
  63. #endif
  64.  
  65. extern char* log_file_name;
  66. extern FILE* logfile;
  67.  
  68. void
  69. panic(char* format, ...)
  70. {
  71.   va_list ap;            /* the variable arguments */
  72.  
  73. #ifdef THINK_C            /* pop up a dialog box */
  74.  
  75.   char buffer[1000];        /* hope this is enough space! */
  76.   long i;
  77.   strncpy(buffer,PANIC_HEADER,1000);
  78.   SysBeep(5);
  79.   va_start(ap, format);        /* init ap */
  80.   vsprintf(buffer + strlen(PANIC_HEADER),format,ap);
  81.   va_end(ap);            /* free ap */
  82.   for (i = 0L; buffer[i] != '\0'; i++)
  83.     { if (buffer[i] == '\n' || buffer[i] == '\r')
  84.     buffer[i] = ' ';
  85.       }
  86.   gError->PostAlertMessage(buffer);
  87.  
  88. #else                /* print in the shell window */
  89.  
  90.   if(logfile == NULL && log_file_name != NULL)
  91.     logfile = fopen(log_file_name, "a");
  92.  
  93.   if(logfile == NULL) logfile = stderr;
  94.   fprintf(logfile, "%d: 999999: %s: -1: %s  ", 
  95.       getpid(), printable_time(),PANIC_HEADER);
  96.   /* fprintf(stderr,BELL); taken out by brewster 7/91 */
  97.   va_start(ap, format);    /* init ap */
  98.   vfprintf(logfile,format,ap); /* print the contents */
  99.   va_end(ap);            /* free ap */
  100.   fprintf(logfile, "\n");
  101.   fflush(logfile);
  102. #endif
  103.   
  104.   if(logfile != stderr) {
  105.     fclose(logfile);
  106.     logfile = NULL;
  107.   }
  108.  
  109.   exitAction(0);
  110. }
  111.  
  112. #else /* use k&r varargs */
  113.  
  114. extern char* log_file_name;
  115. extern FILE* logfile;
  116.  
  117. void
  118. panic(va_alist)
  119. va_dcl
  120. {
  121.   va_list ap;            /* the variable arguments */
  122.   char* format;
  123.   
  124.   if(logfile == NULL && log_file_name != NULL)
  125.     logfile = fopen(log_file_name, "a");
  126.  
  127.   if(logfile == NULL) logfile = stderr;
  128.   fprintf(logfile, "%d: 999999: %s: -1: %s  ", 
  129.       getpid(), printable_time(),PANIC_HEADER);
  130.   /* fprintf(stderr,BELL); taken out by brewster 7/91 */
  131.   
  132.   va_start(ap);            /* init ap */
  133.  
  134.   format = va_arg(ap,char*);    /* get the format */
  135.   
  136.   vfprintf(logfile ,format,ap); /* print the contents */
  137.  
  138.   va_end(ap);            /* free ap */
  139.  
  140.   fprintf(logfile,"\n");
  141.   fflush(logfile);
  142.  
  143.   if(logfile != stderr) {
  144.     fclose(logfile);
  145.     logfile = NULL;
  146.   }
  147.  
  148.   exitAction(0);
  149. }
  150.   
  151. #endif
  152.  
  153. /*----------------------------------------------------------------------*/
  154.